package cn.fansunion.leecode.linkedlist;

/**
 * 删除排序链表中的重复元素。
 * 给定一个已排序的链表的头 head ， 删除所有重复的元素，使每个元素只出现一次 。返回 已排序的链表 。
 * https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
 * @author wen.lei@brgroup.com
 *
 * 2022-1-28
 */
public class RemoveDuplicatesFromSortedList {
    
    /**
     * 一次遍历搞定（网上还有递归版的解法，对于本题，递归解法不够简单明了，没必要）
     * 输入：head = [1,1,1,2,3,3];输出：[1,2,3]
     * @param head
     * @return
     */
    public ListNode deleteDuplicates(ListNode head) {
        //利用链表的“指针”特性，遍历链表，通过修改next放弃中间重复节点来删除重复的节点
        //当前节点，默认为头
        ListNode current = head;
        //next不为null，current头尾很可能为null，需要判断
        while(current!=null && current.next!=null) {
            //next节点，相对于current的next
            ListNode next= current.next;
            //当前节点和下一个节点重复，修改当前节点的next指针跳过next
            //当前节点current“索引没变”，由于next变了，继续遍历current
            if(current.val==next.val) {
                current.next=next.next;
            }else {
                //遇到不重复的元素，进入到下一个不同数字的节点
                current=current.next;
            }
        }
        return head;
    }
}
